26. 删除有序数组中的重复项

26. 删除有序数组中的重复项

题目链接

分析

解题

需要注意,跟 27. 移除元素 相比,我们增加一步,就是要用一个变量记录上一次快指针遍历的元素,然后在后期通过快指针遍历整个数组的时候,碰到不同的值就更新这个值,而且题目是删除重复项,因此数组的第一个元素是不会被移除的,因为此时还没有任何对比,因此,快慢指针从第二个元素(索引为 1)开始遍历整个数组。

public int removeDuplicates(int[] nums) {
    // 用一个变量来保存快指针上一次遍历的元素
    int lastEle=nums[0];
    // 第一个元素一定不会被剔除,因此我们从索引为1的元素开始遍历
    int slow=1,fast=1;
    for(;fast<nums.length;fast++){
        if(nums[fast]!=lastEle){
            nums[slow]=nums[fast];
            slow++;
            // 更新 lastEle
            lastEle = nums[fast];
        }
    }
    return slow;
}

相关题

27. 移除元素
283. 移动零
844. 比较含退格的字符串
977. 有序数组的平方
滑动窗口
209. 长度最小的子数组
904. 水果成篮